package com.bonuo.saas.handler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.*;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

// 处理“虚拟字段的字符串结果”转 List<Integer>
public class StringToListIntegerHandler extends BaseTypeHandler<List<Integer>> {

    // 从 ResultSet 读取虚拟字段（synergyIds）时触发转换
    @Override
    public List<Integer> getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String value = rs.getString(columnName); // 读取 SQL 中 synergyIds 字段的字符串值（如 "1,2"）
        return convertStringToList(value);
    }

    @Override
    public List<Integer> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String value = rs.getString(columnIndex);
        return convertStringToList(value);
    }

    @Override
    public List<Integer> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String value = cs.getString(columnIndex);
        return convertStringToList(value);
    }

    // 写入数据库时的逻辑（当前场景用不到，因为 synergyIds 是虚拟字段，无需写入）
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, List<Integer> parameter, JdbcType jdbcType) throws SQLException {
        // 空实现即可（若后续有“保存 List 到数据库”的需求，再补充）
    }

    // 核心：将虚拟字段的字符串（如 "1,2"）转为 List<Integer>
    private List<Integer> convertStringToList(String value) {
        if (value == null || value.trim().isEmpty()) {
            return null; // 或返回 Collections.emptyList()，根据业务决定（前端会收到 []）
        }
        // 分割字符串、去空格、转 Integer
        return Arrays.stream(value.split(","))
                    .map(String::trim) // 处理可能的空格（如 "1, 2" 转为 "1"和"2"）
                    .map(Integer::parseInt) // 字符串转 Integer
                    .collect(Collectors.toList());
    }
}